module counterN(clk, rst, sel, q1, q2);
    input clk;              // 输入时钟信号
    input rst;              // 输入复位信号
    input sel;              // 输入选择信号
    
    output reg [3:0] q1;    // 输出寄存器，用于输出计数器的值（4位）
    output reg q2;          // 输出寄存器，用于表示计数器是否达到最大值（1位）

    wire [3:0] N;           // 临时变量N，用于存储根据选择信号sel选择的初始值

    parameter N1 = 4'd10;   // 参数，表示选择信号为1时的初始值
    parameter N2 = 4'd6;    // 参数，表示选择信号为0时的初始值

    assign N = (sel) ? N1 : N2;    // 根据选择信号sel选择初始值N1或N2

    always @(posedge clk or posedge rst)
    begin
        if (rst)                // 当复位信号rst为高电平时执行以下操作
        begin
            q1 <= 4'd0;         // 将q1寄存器重置为0
            q2 <= 1'b0;         // 将q2寄存器重置为0
        end
        else
        if (q1 < N-1)           // 当q1小于N-1时执行以下操作
        begin
            q1 <= q1 + 1'b1;    // 将q1寄存器加1
            q2 <= 1'b0;         // 将q2寄存器置为0
        end
        else                    // 当q1等于N-1时执行以下操作
        begin
            q1 <= 4'd0;         // 将q1寄存器重置为0
            q2 <= 1'b1;         // 将q2寄存器置为1
        end
    end
endmodule
